home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 November: Tool Chest / Dev.CD Nov 96 TC / Dev.CD Nov 96 TC.toast / Sample Code / Snippets / Sound / SndPlayDoubleBuffer / _headers / SimpleApp.h < prev    next >
Encoding:
C/C++ Source or Header  |  1996-05-06  |  14.9 KB  |  447 lines  |  [TEXT/CWIE]

  1. /*
  2. **    Apple Macintosh Developer Technical Support
  3. **
  4. **    Header information for Simple App framework.
  5. **
  6. **    by Matt Xavier Mora, Apple Developer Technical Support
  7. **
  8. **    File:    SimpleApp.h
  9. **
  10. **    Copyright ©1996 Apple Computer, Inc.
  11. **    All rights reserved.
  12. **
  13. **    You may incorporate this sample code into your applications without
  14. **    restriction, though the sample code has been provided "AS IS" and the
  15. **    responsibility for its operation is 100% yours.  However, what you are
  16. **    not permitted to do is to redistribute the source as "Apple Sample
  17. **    Code" after having made changes. If you're going to re-distribute the
  18. **    source, we require that you make it clear in the source that the code
  19. **    was descended from Apple Sample Code, but that you've made changes.
  20. */
  21.  
  22. #include <Lists.h>
  23. #include <AppleEvents.h>
  24. #include <TextEdit.h>
  25.  
  26. #ifndef __SIMPLEAPP__
  27. #define __SIMPLEAPP__
  28.  
  29. /*---------------------------------------------------------------------------------- */
  30. #pragma mark Defines
  31. /*---------------------------------------------------------------------------------- */
  32. #define    kMagicSig                 (0x4D584D21)    /* 'MXM!' our magic signature */
  33. #define    kMaxMenus                 (20)
  34. #define    kMaxMenuItems             (128)
  35. #define    kMaxButtons             (128)
  36. #define    kMaxEventProcs             (10)
  37. #define    kAppleEventLoadingErr     (129)
  38. #define kScrollBarType            'scrl'
  39. #define    kEventPassThru             (true)        /* This lets the event pass thru to the default handler */
  40. #define    kEventOverRide             (false)        /* This overides the event and doesn't call to the default handler */
  41.  
  42. #define    kUpArrow                 (30)
  43. #define    kDownArrow                 (31)
  44. #define    kEnterKey                 (0x03)
  45. #define    kReturnKey                 (0x0D)
  46. #define    kTabKey                 (0x09)
  47.  
  48. #define    kAppleNum                 (128)
  49. #define    kFileNum                 (129)
  50. #define    kEditNum                 (130)
  51. #define    kMenuStartID             (127)
  52. #define    kMargin                 (5)
  53. #define    kUseStandardMenu         (true)
  54.  
  55. #define    oneBuffer                (1)
  56. #define    tenBuffers                (10)
  57. #define    qtStyle                    0
  58. #define    cdStyle                    1
  59.  
  60. /*---------------------------------------------------------------------------------- */
  61. #pragma mark typedefs
  62. /*---------------------------------------------------------------------------------- */
  63. typedef        Str255 StringArray;
  64.  
  65. typedef        StringArray *StringArrayPtr,**StringArrayHandle ;
  66.  
  67. typedef        ControlRef ControlArray[];
  68. typedef        ControlArray *ControlArrayPtr,**ControlArrayHandle;        
  69.         
  70. typedef    struct GroupRec *GroupRecPtr,**GroupRecHandle;
  71. typedef    struct ObjectItemRec *ObjectItemRecPtr,**ObjectItemRecHandle;
  72. typedef struct MenuItemRec MenuItemRec,    *MenuItemRecPtr ,**MenuItemRecHandle ;
  73. typedef struct     ButtonItemRec ButtonItemRec,*ButtonItemRecPtr,** ButtonItemRecHandle;
  74.  
  75.  
  76.  
  77.         
  78. typedef pascal short      (* MenuHitProc)  ( long modifiers);
  79. typedef pascal short      (* MenuUpdateProc )( long modifiers);
  80. typedef pascal short      (* ButtonHitProc)( long modifiers) ;
  81. typedef pascal short      (* ButtonUpdateProc )( long modifiers);
  82. typedef pascal void       (* MyActionProc)(ControlHandle control,short part);
  83. typedef pascal Boolean     (* AboutProc) (long data);
  84.  
  85. typedef pascal Boolean     (* PreGroupHitProc) (long modifiers ,Point pt, ControlArrayPtr cap , short count) ;
  86. typedef pascal short     (*    PostGroupHitProc ) ( long modifiers ,ControlRef cr,ButtonItemRecHandle brh, short item);
  87. typedef pascal short     (*    GroupUpdateProc ) ( WindowRef wind,GroupRecHandle grh );
  88.  
  89.  
  90. typedef pascal short     (*    WindowHitProc)( long modifiers);
  91. typedef pascal short     (*    ListHitProc )( long modifiers) ;
  92. typedef pascal short     (*    EditFieldHitProc )( long modifiers) ;
  93. typedef pascal short     (*    WindowUpdateProc )( long modifiers) ;
  94. typedef pascal short     (*    ListUpdateProc )( long modifiers) ;
  95. typedef pascal void         (*    ListDrawCellProc )(   Point thecell, Rect *bounds ,ListRef listID );
  96. typedef pascal short     (*    EditFieldUpdateProc )( long modifiers) ;
  97.  
  98. typedef pascal short (*    WindowIdleProc)( long modifiers) ;
  99. typedef pascal short (*    ListIdleProc )( long modifiers) ;
  100. typedef pascal short (*    EditFieldIdleProc )( long modifiers) ;
  101. typedef pascal short (*    WindowGrowProc )(EventRecord *event );
  102. typedef pascal short (*    WindowZoomProc)(EventRecord *event);
  103. typedef pascal short (*    WindowActivateProc )(Boolean isActivating  ) ;
  104.         
  105. typedef pascal short (*    TextFieldHitProc )( long modifiers) ;
  106. typedef pascal short (*    TextFieldUpdateProc )( long modifiers) ;
  107. typedef pascal short (*    EventProcs )(EventRecord *event) ;
  108. typedef pascal short (*    TerminateProc )( long flags) ;
  109. typedef pascal short (*    InitializeProc )( long flags) ;
  110. typedef pascal short (*    LowMemProc )( long flags ) ;
  111. typedef pascal short (*    MenuEventProc) (long menuResult);
  112. typedef pascal void     (*    WindowCloseProc)(WindowRef * theWindow);
  113.  
  114. /* generic object stuff */
  115. typedef pascal Handle (* ObjectInitProc)    (ObjectItemRecHandle orh);
  116. typedef pascal OSErr (* ObjectDisposeProc)    (ObjectItemRecHandle orh);
  117. typedef pascal short (* ObjectHitProc )     (Point *pt,long modifiers, ObjectItemRecHandle me);
  118. typedef pascal short (* ObjectTrackProc )     (Point *pt,long modifiers, ObjectItemRecHandle me);
  119. typedef pascal short (* ObjectUpdateProc)    (WindowRef window, RgnHandle update,ObjectItemRecHandle me) ;
  120. typedef pascal void  (* ObjectKeyProc )        (char keyCode, char theChar,long modifiers);
  121.  
  122. /* Apple Event Stuff */
  123. typedef pascal OSErr (* OpenDocProc )     ( AppleEvent *ae, AppleEvent * AEreply,long handlerRefcon);
  124. typedef pascal OSErr (* OpenAppProc )     ( AppleEvent *ae, AppleEvent * AEreply, long handlerRefcon);
  125. typedef pascal OSErr (* QuitAppProc )     ( AppleEvent *ae, AppleEvent * AEreply, long handlerRefcon);
  126. typedef pascal OSErr (* PrintDocProc )     ( AppleEvent *ae, AppleEvent * AEreply, long handlerRefcon);
  127. typedef pascal short (* ScriptProc ) (short resId);
  128.  
  129.  
  130. struct MenuItemRec {
  131.     short menuID  ;
  132.     short menuItem  ;
  133.     Handle menuObject  ;
  134.     MenuHitProc menuHit  ;
  135.     MenuUpdateProc menuUpdate  ;
  136. };
  137.  
  138.  
  139. struct ButtonItemRec {
  140.     ButtonItemRecHandle nextButton  ;
  141.     short buttonID  ;
  142.     ControlHandle buttonObject  ;
  143.     ButtonHitProc buttonHit  ;
  144.     ButtonUpdateProc buttonUpdate  ;
  145. };
  146.  
  147. typedef struct     ScrollItemRec ScrollItemRec,*ScrollItemRecPtr, **ScrollItemRecHandle;    
  148.                 
  149. struct        ScrollItemRec {
  150.     long scrollType;
  151.     ScrollItemRecHandle nextScroll;
  152.     short scrollID;
  153.     ControlHandle scrollObject;
  154.     MyActionProc scrollHit;
  155.     MyActionProc scrollUpdate;
  156.     MyActionProc scrollIndicator;
  157.     MyActionProc scrollButton;
  158. };
  159.  
  160. struct PrintAreaRec {
  161.         Rect windowPrintRect  ;
  162.         short windowPrintHorz  ;
  163.         short windowPrintVert  ;
  164.         short windowPrintLineHeight  ;
  165.         short windowPrintMaxVert  ;
  166.         short windowPrintMargin  ;
  167. };
  168. typedef struct PrintAreaRec PrintAreaRec ,* PrintAreaRecPtr,**PrintAreaRecHandle;
  169.  
  170. typedef struct    ListItemRec ListItemRec,*ListItemRecPtr,**ListItemRecHandle ;
  171.  
  172. struct    ListItemRec {
  173.     ListItemRecHandle nextList  ;
  174.     ListRef listObject  ;
  175.     short listID  ;
  176.     ListHitProc listHit  ;
  177.     ListUpdateProc listUpdate  ;
  178.     ListIdleProc listIdle  ;
  179. };
  180.  
  181. typedef struct    EditFieldItemRec EditFieldItemRec,*EditFieldItemRecPtr,**EditFieldItemRecHandle ;
  182.  
  183. struct EditFieldItemRec {
  184.     EditFieldItemRecHandle nextEdit  ;
  185.     short editFieldID  ;
  186.     long editFieldFlags ;
  187.     TEHandle editFieldObject  ;
  188.     EditFieldHitProc editFieldHit  ;
  189.     EditFieldUpdateProc editFieldUpdate  ;
  190.     EditFieldIdleProc editFieldIdle  ;
  191. }; 
  192.  
  193.  
  194. enum { 
  195.         EditType,
  196.         ListType,
  197.           ButtonType
  198. } ;
  199. typedef SInt8 contentItemType;
  200.         
  201. struct    ContentRec {
  202.     short contentCount  ;
  203.     contentItemType kind  ;
  204.     union {
  205.         EditFieldItemRec efr  ;
  206.         ListItemRec lir  ;
  207.         ButtonItemRec bir ;         
  208.     };
  209. };
  210.  
  211. typedef struct     ContentRec ContentRec,*    ContentRecPtr;
  212.         
  213. typedef ContentRec WindowItemsArray[];
  214. typedef ContentRec * WindowItemsArrayPtr;
  215.  
  216. struct WindowItemRec {
  217.         long                     windowMagic  ; /* Signature so we know our windows */
  218.         short                     windowID  ;
  219.         WindowRef                 windowObject  ;
  220.         WindowHitProc             windowHit  ;
  221.         WindowUpdateProc         windowUpdate  ;
  222.         WindowIdleProc             windowIdle  ;
  223.         WindowGrowProc             windowGrow  ;
  224.         WindowActivateProc         windowActivate  ;
  225.         WindowCloseProc            windowClose;
  226.         WindowZoomProc            windowZoom;
  227.         PrintAreaRec             windowPrintAreaRec  ;
  228.         FSSpec                     windowFSSpec  ;
  229.         short                   windowRefNum;
  230.         ListItemRecHandle         windowLists  ;
  231.         EditFieldItemRecHandle     windowEdits  ;
  232.         ButtonItemRecHandle     windowButtons  ;
  233.         ScrollItemRecHandle     windowScroll;
  234.         Boolean                 windowHasControls  ;
  235.         Boolean                 windowHasLists  ;
  236.         Boolean                 windowHasEditField  ;
  237.         short                     windowItemCount  ;
  238.         WindowItemsArrayPtr     windowItems  ;
  239. };
  240. typedef struct WindowItemRec WindowItemRec, *WindowItemRecPtr,**WindowItemRecHandle;
  241.  
  242.         
  243. struct ProcTableRec {
  244.     EventProcs         EventProcsArray[kMaxEventProcs];
  245.     TerminateProc     Terminate ;
  246.     InitializeProc     Initialize;
  247.     LowMemProc         LowMem ;
  248.     MenuEventProc     MenuEvent ;
  249.     AboutProc         About;
  250.     OpenDocProc     openDocAE ;
  251.     OpenAppProc     openAppAE;
  252.     QuitAppProc     quitAppAE;
  253.     PrintDocProc     printDocAE;
  254. };
  255.  
  256.  
  257. #if __POWERPC__
  258.  
  259. #else
  260. #define gSACurrentWindow GSACURRENTWINDOW
  261. #define gSACurControl GSACURCONTROL
  262. #define gSAVPageSize GSAVPAGESIZE
  263. #define gSAHPageSize GSAHPAGESIZE
  264. #define gSAVLineSize GSAVLINESIZE
  265. #define gSAHLineSize GSAHLINESIZE
  266. #endif
  267.  
  268.  
  269. typedef struct ProcTableRec ProcTableRec, *ProcTablePtr;
  270. /*---------------------------------------------------------------------------------- */
  271. #pragma mark Globals
  272. /*---------------------------------------------------------------------------------- */
  273. extern        ListRef gSAMyList  ;
  274. extern        short gSATerminateReason ;     /* When Quiting this tells us why we are quiting */
  275. extern        Boolean gSADebug ;            /* Activate Debug Alerts. May make this an short */
  276.                                         /* for levels of debug */
  277. extern        ProcTableRec gSAProcs  ;
  278. extern        Boolean gOApped  ;
  279. extern        Boolean gSADone  ;
  280. extern        Boolean gSAHasAppleEvents  ;
  281. extern        Boolean gSAHasTE  ;
  282. extern        Boolean gSAHasList  ;
  283. extern        MenuRef gSAAppleMenu  ;
  284. extern        MenuRef gSAFileMenu  ;
  285. extern        MenuRef gSAEditMenu  ;
  286. extern        EventRecord gSAEvent  ;
  287. extern        Boolean gSAHasControls  ;
  288. extern        WindowRef gSACurrentWindow  ;
  289. extern        short gSADefaultFont  ;
  290. extern        short gsADefaultSize  ;
  291. extern        SysEnvRec gSAMac  ;
  292. extern        WindowItemRecHandle gSACurWRecHandle  ;
  293. extern        short gSAWindowID  ;
  294. extern        TEHandle gSACurTE  ;
  295. extern         ControlHandle gSACurControl;
  296. extern        ListRef gSACurList  ;
  297. extern         short     gSACurrentItem;
  298. extern         WindowItemRecHandle gSACurrentWIRH;
  299. extern        ButtonUpdateProc     NilButtonUpdateProc  ;
  300. extern        MenuUpdateProc         NilMenuUpdateProc  ;
  301. extern        EditFieldUpdateProc NilEditFieldUpdateProc  ;
  302. extern        EditFieldHitProc     NilEditFieldHitProc  ;
  303. extern         short gSAVPageSize ;
  304. extern         short gSAHPageSize ;
  305. extern         short gSAVLineSize ;
  306. extern         short gSAHLineSize ;
  307.  
  308.  
  309. /*---------------------------------------------------------------------------------- */
  310. #pragma mark Prototypes
  311. /*---------------------------------------------------------------------------------- */
  312.  
  313. pascal short SAExecuteScript(short resID);
  314. pascal    void SAMoveObject (ObjectItemRecHandle orh,short h,short v, Boolean reDraw);
  315. pascal    void SADrawGroup(GroupRecHandle    grh,RgnHandle update);
  316.  
  317. pascal    void InitSimpleApp (short masters ,  Boolean wantsStandardMenu);
  318. pascal    void Run(void);
  319. pascal    void CloseSimpleApp(void);
  320. pascal  void SADoWindowClose(WindowRef * theWindow);
  321.  
  322. pascal    short DefaultMenuHit ( long modifiers);
  323. pascal    short InstallMenuItem (short menuID, 
  324.                                 short MenuItem,
  325.                                 ConstStr255Param menuTitle, 
  326.                                 UInt8 mark,
  327.                                 UInt8 cmdChar,
  328.                                 MenuHitProc menuHit,
  329.                                 MenuUpdateProc menuUpdate);
  330.  
  331. pascal    short InstallPushButton (long *buttonID,
  332.                                  WindowRef window,
  333.                                  ConstStr255Param name,
  334.                                  Rect *r,
  335.                                  UInt8 cmdKey,
  336.                                  ButtonHitProc bhp ,
  337.                                  ButtonUpdateProc bup  );
  338.                                  
  339. pascal     short InstallCustomObject (long * objectID,
  340.                                     WindowRef window ,
  341.                                     ConstStr255Param name ,
  342.                                     Rect * r ,
  343.                                     UInt8 cmdKey ,
  344.                                     ObjectInitProc oip ,
  345.                                     ObjectDisposeProc odp ,
  346.                                     ObjectHitProc ohp ,
  347.                                     ObjectTrackProc otp ,
  348.                                     ObjectUpdateProc oup );
  349.                                     
  350. pascal short InstallControl (long * buttonID,
  351.                              WindowRef window,
  352.                              ConstStr255Param name,
  353.                              Rect *  r ,
  354.                              UInt8 cmdKey,
  355.                              short controlType,
  356.                              ButtonHitProc bhp ,
  357.                              ButtonUpdateProc bup );
  358.                              
  359. pascal short InstallCheckBox (long *buttonID,
  360.                              WindowRef window,
  361.                              ConstStr255Param name,
  362.                              Rect *  r ,
  363.                              UInt8 cmdKey,
  364.                              short initialValue, 
  365.                              ButtonHitProc bhp ,  /* set to nil for default checkbox action */
  366.                              ButtonUpdateProc bup );
  367.                              
  368. pascal    short InstallScrollBar (long * buttonID,
  369.                                  WindowRef window,
  370.                                  ConstStr255Param name,
  371.                                  Rect *r,
  372.                                  UInt8 cmdKey,
  373.                                  MyActionProc scrollHitProc ,
  374.                                  MyActionProc scrollButtonProc ,
  375.                                  MyActionProc  scrollIndicatorProc);
  376.                                  
  377. pascal short InstallRadioGroup (short theGroupID,
  378.                                 WindowRef window, 
  379.                                 short count, 
  380.                                 ConstStr255Param title,
  381.                                 StringArrayPtr names,
  382.                                 Rect * r, 
  383.                                 short defaultItem,
  384.                                 short hSpacing,
  385.                                 short vSpacing,
  386.                                 short buttonHeight,
  387.                                 short buttonWidth,
  388.                                 PreGroupHitProc PreGHP, 
  389.                                 PostGroupHitProc PostGHP, 
  390.                                 GroupUpdateProc gup );
  391.  
  392. pascal    short CreateDocumentWindow (ConstStr255Param name  ,
  393.                                     Rect * bounds  ,
  394.                                     Boolean visable );
  395. pascal void SAInitScripting(void);    
  396.                                 
  397. pascal    short GetDocumentWindow (  short resID);
  398.  
  399. pascal    void Print (Str255 s );                   /* Print no CR */
  400. pascal    void PrintLine (Str255 s);                /* Print with CR */
  401. pascal    void PrintTextHandle (Handle text  );     /* Print a buffer full of text with CR */
  402.  
  403. pascal    void SetRectLocation ( Rect *r,short h, short v);            /* This Sets a rects anchor point */
  404. pascal    void SetRectDimensions (Rect *r,short h, short v);            /* This Sets its size without changing its position */
  405.  
  406. pascal    void GetPrintArea (WindowRef window ,Rect * bounds );
  407. pascal    void SetPrintArea (WindowRef window, Rect * bounds );
  408.  
  409. pascal    EditFieldItemRecHandle SAGetEditField (WindowRef wind,short editID) ;
  410. pascal    void SASetFocus (WindowRef theWindow, EditFieldItemRecHandle efrh);
  411.  
  412. pascal    short InstallEditField (long * editID , 
  413.                                 WindowRef window,
  414.                                 ConstStr255Param name  ,
  415.                                 Rect * r,
  416.                                 EditFieldHitProc hitProc  ,
  417.                                 EditFieldUpdateProc updateProc  ,
  418.                                 ObjectKeyProc    keyProc    ,
  419.                                 long flags  );
  420.  
  421. pascal    short InstallList (long * listID  , 
  422.                             WindowRef window,
  423.                             Rect * r,
  424.                             ListHitProc lhp  , 
  425.                             ListUpdateProc lup  ,
  426.                             ListDrawCellProc ldcp  , 
  427.                             long flags );
  428.  
  429. pascal    short GetTEString (short editFieldID  ,ConstStr255Param s  ) ;
  430. pascal    OSErr AddStringToList (ListRef listID  ,ConstStr255Param s  );
  431.  
  432. pascal    void BlastString (short h, short v  ,Str255 s  ); /* These will blast text at the location specified. It erases as it draws */
  433. pascal    void BlastText (short h,short v  ,Handle text  );
  434. pascal    void InstallIdleProc(EventProcs  ip);
  435. pascal  void SetMyTitle(Str255 title);
  436. pascal  void SAEnableMe(void);
  437. pascal  void SADisableMe(void);
  438. pascal  void SAEnableObject(long thing);
  439. pascal  void SADisableObject(long thing);
  440. pascal     ButtonItemRecHandle SAGetGroupItem(WindowRef wind,short groupID,short item);
  441. pascal     ControlHandle SAGetObjectHandle(long thing);
  442. pascal    short SADrawObject(ObjectItemRecHandle orh,RgnHandle update);
  443.  
  444.  
  445.  
  446. #endif
  447.